4. ์žฌ๊ท€์™€ ๋ฐฑํŠธ๋ž™ํ‚น

7/9/2025

๋ฃจํ”„

์ž…๋ ฅ ๊ฐ’์€ ํ•ญ์ƒ n ์ด๋ผ๊ณ  ํ‘œ๊ธฐํ•œ๋‹ค.

for(i=1;i<=n;i++){
	m += 2;
}

์—ฌ๊ธฐ์„œ m์— 2์”ฉ ๋”ํ•ด์ฃผ๋Š” ๊ณ„์‚ฐ์„ c๋ผ๊ณ  ํ•˜๋ฉด
n๋ฒˆ ๋งŒํผ c๊ณ„์‚ฐ์ด ์‹คํ–‰๋˜๋Š”๊ฒƒ์ด๋‹ˆ๊นŒ c*n ์˜ ๋ณต์žก๋„.
๊ทธ๋Ÿฐ๋ฐ c์™€ ๊ฐ™์€ ์ƒ์ˆ˜๋“ค์€ ์ œ์™ธํ•˜๊ณ  ํ‘œ๊ธฐํ•˜๋‹ˆ๊นŒ O(n)์˜ ๋ณต์žก๋„

์ค‘๋ณต ๋ฃจํ”„

for(i=1;i<=n;i++){
	for(j=1;j<=n;j++){
    	k += 2;
    }
}

์—ฌ๊ธฐ์„œ๋Š” n๋ฒˆ์„ ๋ฐ˜๋ณตํ•˜๋Š”๋ฐ ๊ฐ ๋ฐ˜๋ณต๋งˆ๋‹ค n๋ฒˆ์”ฉ ๋ฐ˜๋ณต๋ฌธ์„ ์‹คํ–‰ํ•˜๋‹ˆ
(cโˆ—n)โˆ—n=n2 ๊ทธ๋ž˜์„œ O(n2)์˜ ๋ณต์žก๋„๋ผ๊ณ  ํ‘œ๊ธฐ

if-then-else

if(length()==0){
	return false; // c0
}else{
	... // c1
	for(i=0;i<length();i++){
    	... // c2
    	if(){
        	... // c3
        }
    }
}

if๋ฅผ f(n), else๋ฅผ g(n)์ด๋ผ๊ณ  ํ•˜๊ณ 
**max(f(n),g(n))**์„ ๊ตฌํ•˜๋ฉด ์ œ์ผ ๋†’์€ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„ ๊ฒฝ์šฐ๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ
์ด๊ฑธ f(n)+g(n) ์ด๋ผ๊ณ  ํ‘œํ˜„ํ•œ๋‹ค๊ณ .
๋งŒ์•ฝ f(n)์ด n4, g(n)์ด n3๋ผ๋ฉด n4+n3์ด ๋˜๊ณ 
์ž‘์€๊ฒŒ ์‚ฌ๋ผ์ง€๋‹ˆ๊นŒ O(n4)๋งŒ ๋‚จ๋Š”๋‹ค.

์œ„์˜ ์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉด c0โ€‹+c1โ€‹+n(c2โ€‹+c3โ€‹) ๊ณ  ์ƒ์ˆ˜๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด O(n)์˜ ๋ณต์žก๋„.

๋กœ๊ทธํ˜• ๋ณต์žก๋„

์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋ฌธ์ œ์˜ ํฌ๊ธฐ๋ฅผ ์ผ๋ถ€ ์ค„์ด๋Š”๋ฐ ์ผ์ •ํ•œ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค๋ฉด O(logn)

for(i=1;i<=n;){
	i = i*2;
}

์œ„์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด i++์ด ์•„๋‹ˆ๋ผ 2์”ฉ ๊ณฑํ•ด์ฃผ๊ณ  ์žˆ๋‹ค.
๋งŒ์•ฝ n์ด 1000์ด๋ผ๋ฉด i๋Š” 1,2,4,8,16,32,64,128,256,512,1028, ... ๋กœ ์ง„ํ–‰๋˜๋Š”๋ฐ ๊ฑฐ๊ธฐ์„œ i<1000์„ ๋งŒ์กฑํ•˜๋Š” 512๊นŒ์ง€ ๋ฐ˜๋ณต ํšŸ์ˆ˜๋Š” 10์ด๋‹ค.
๊ณฑํ•˜๊ธฐ 2์”ฉ ํ•ด์ฃผ๋‹ˆ๊นŒ ๋ฐ˜๋ณตํšŒ์ˆ˜๊ฐ€ k๋ผ๋ฉด i=2k์ธ๊ฒƒ.
๊ทธ๋ž˜์„œ log2โ€‹๊ฐ€ ๋˜๊ณ  n์€ ์ž…๋ ฅ์˜ ์ˆ˜๋‹ˆ๊นŒ log2โ€‹1000

์˜ˆ์‹œ) ์ด์ง„ ๊ฒ€์ƒ‰ - ์‚ฌ์ „(nํŽ˜์ด์ง€)์—์„œ ๋‹จ์–ด ์ฐพ๊ธฐ

n๊ฐœ์˜ ์ž๋ฃŒ๊ฐ€ ์žˆ์„๋•Œ ํŠธ๋ฆฌ ์ž๋ฃŒํ˜•์— ๊ด€๋ฆฌ๋ฅผ ํ•ด๋‘”๋‹ค๋ฉด?
์˜ˆ๋ฅผ๋“ค์–ด 81๋ผ๋Š” ์ˆซ์ž๊ฐ€ ํŠธ๋ฆฌ์— ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด, ๊ธฐ์กด ๋ฐฐ์—ด์—์„œ๋Š” ์ตœ์•…์˜ ๊ฒฝ์šฐ ๋ฐฐ์—ด์˜ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์ฆ‰ n๋ฒˆ ์—ฐ์‚ฐ์„ ์‹คํ–‰ํ•ด์•ผ ํ•œ๋‹ค.
๊ทธ๋Ÿฐ๋ฐ ํŠธ๋ฆฌํ˜•์—์„œ๋Š” ํŠธ๋ฆฌ์˜ ๋†’์ด๋งŒํผ๋งŒ ํ™•์ธํ•ด๋ณด๋ฉด 81์ด ์žˆ๋Š”์ง€ ์—†๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
ํŠธ๋ฆฌ์˜ ๋†’์ด๋Š” n<2k ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค. ์ฆ‰ ๋งŒ์•ฝ 14๊ฐœ์˜ ์ˆซ์ž๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜๋ฉด k๋Š” 4๊ณ  ํŠธ๋ฆฌ์˜ ๋†’์ด๋Š” 4์ธต. ์ตœ๋Œ€ 4๋ฒˆ ํ™•์ธํ•ด๋ณด๋ฉด ๋œ๋‹ค. (์ž˜ ์ •๋ ฌ๋˜์–ด์žˆ๋‹ค๋ฉด)
๋งŒ์•ฝ ์‚ฌ์ „์— ๋‹จ์–ด๊ฐ€ 2๋งŒ๊ฐœ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด n=20000์ด๊ณ  ์ด๊ฑธ log๋ฅผ ํ•˜๋ฉด 14.3์ด ๋‚˜์˜ค๊ณ  ํŠธ๋ฆฌ์˜ ๋†’์ด๋Š” 15์ธต.

์žฌ๊ท€recursion๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

์ž๊ธฐ ์ž์‹ ์„ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜.
์ž๊ธฐ ์ž์‹ ์˜ ๋ณต์‚ฌ๋ณธ์„ ํ˜ธ์ถœํ•˜์—ฌ ๋” ์ž‘์€ ๋ฌธ์ œ๋ฅผ ํ’€๊ฒŒ ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.
์ž‘์€ ๋ฌธ์ œ์˜ ์„œ์—ด์€ ๊ฒฐ๊ตญ ๊ธฐ๋ณธ ๊ฒฝ์šฐ base case๋กœ ์ˆ˜๋ ดํ•ด์•ผ ํ•œ๋‹ค.

์ˆ˜ํ•™์  ๊ท€๋‚ฉ๋ฒ•์—์„œ
n=1์„ ์ฆ๋ช…ํ•˜๊ณ ,
n=i๋ฅผ ๊ฐ€์ •ํ•ด์„œ n=i+1์„ ์ฆ๋ช…ํ•˜๋ฉด
์„ฑ๊ณต์ ์œผ๋กœ ์ฆ๋ช…์„ ํ•œ๋‹ค๊ณ  ํ–ˆ๋‹ค.
์žฌ๊ท€๋„ ์ด๊ฒƒ๊ณผ ๋น„์Šทํ•˜๋‹ค.

์˜ˆ์‹œ) ํŒฉํ† ๋ฆฌ์–ผ

n!=1โˆ—2โˆ—3โˆ—....โˆ—n
์ด๊ฑด ๋‹ค์‹œ n!=nโˆ—(nโˆ’1)!๊ณผ ๊ฐ™๋‹ค.
์ด๊ฑธ ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค๋ฉด

int Fact(int n){
	if(n==1){ //base case
    	return 1;
    }else if(n==0){ //base case
    	return 1;
    }else{ //recursion step  
     	return n*Fact(n-1); //๋” ์ž‘์•„์ง„๋‹ค.
    }
}

27์ด ์ž…๋ ฅ๋œ๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฒฝ์šฐ์— ํ•ด๋‹น๋˜์ง€ ์•Š์œผ๋‹ˆ๊นŒ 27*Fact(26)์„ ๋ฐ˜ํ™˜ํ•˜๋Š”๋ฐ ์ด๊ฑด ๋‹ค์‹œ 26*Fact(25)๊ฐ€ ๋˜๊ณ  ...... ๋ฐ˜๋ณต.
์ด ๊ฒฝ์šฐ์—๋Š” for๋ฐ˜๋ณต๋ฌธ์ด ํ›จ์”ฌ ์ง๊ด€์ ์ด๊ณ  ํŽธํ•˜๊ธด ํ•˜๋‹ค.

์žฌ๊ท€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์œ„์—์„œ์ฒ˜๋Ÿผ ์žฌ๊ท€์  ๊ฒฝ์šฐ recursion step๊ณผ ๊ธฐ๋ณธ ๊ฒฝ์šฐ base case ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋‰˜๊ณ . ๊ธฐ๋ณธ ๊ฒฝ์šฐ์— ์ข…๋ฃŒ๋œ๋‹ค.

์žฌ๊ท€์™€ ๋ฉ”๋ชจ๋ฆฌ

int Print(int n){
	if(n==0){
    	return 0;
    }else{
    	printf("%d",n);
        return Print(n-1);
    }
}

n=5๋ผ๋ฉด 5,4,3,2,1์„ ์ถœ๋ ฅํ•œ๋‹ค.
๊ทธ๋Ÿฐ๋ฐ ์‹ค์ œ๋กœ ๋ณด๋ฉด ๊ธฐ๋ณธ๊ฒฝ์šฐ์—์„œ ๋ฐ˜ํ™˜ํ•˜๋Š” 0์€ ์—ญ์ˆœ์œผ๋กœ ์ญ‰ ํƒ€๊ณ  ์˜ฌ๋ผ์˜จ๋‹ค.
์ถœ๋ ฅ->(์žฌ๊ท€ํ•จ์ˆ˜)ํ˜ธ์ถœ->์ถœ๋ ฅ->ํ˜ธ์ถœ->....-> 0 ๊ธฐ๋ณธ๊ฒฝ์šฐ์— ๋„์ฐฉํ•˜๋ฉด
๋ฐ˜ํ™˜๋˜๋Š” 0์€ Print(1)๋กœ ์˜ฌ๋ผ๊ฐ€๊ณ  Print(1)์€ Print(2)๋กœ 0์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์ด๋ ‡๊ฒŒ ์ฒ˜์Œ Print(5)๊นŒ์ง€ ์˜ฌ๋ผ๊ฐ€์„œ ๋งˆ์ง€๋ง‰์œผ๋กœ 0์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์ข…๋ฃŒ.

๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ์Šคํƒ์— Print(5)๊ฐ€ ์˜ฌ๋ผ๊ฐ€๊ณ  ๊ทธ ์œ„์— Print(4)๊ฐ€ ์˜ฌ๋ผ๊ฐ€๊ณ  3,2,1,0 ๊นŒ์ง€ ์˜ฌ๋ผ๊ฐ”๋‹ค๊ฐ€ 0,1,2 ์ˆœ์„œ๋Œ€๋กœ ํ•˜๋‚˜์”ฉ ์‚ฌ๋ผ์ง„๋‹ค(๊ฐ ํ•œ์นธ์‹์„ '์Šคํƒ ํ”„๋ ˆ์ž„'์ด๋ผ๊ณ  ํ•œ๋‹ค). ์ฆ‰ ๋ฉ”๋ชจ๋ฆฌ ์ถ”๊ฐ€ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๋ง.
๊ทธ๋ž˜์„œ ์ผ๋ฐ˜์ ์œผ๋กœ for๋ฐ˜๋ณต๋ฌธ์ด ํšจ์œจ์ ์ด๋‹ค. ํ•˜์ง€๋งŒ ์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•ด์•ผ๋˜๋Š” ๋งŽ์€ ๊ฒฝ์šฐ ๋ˆˆ์— ๋„๋Š” ๋ฐ˜๋ณต์  ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์—†์„ ์ˆ˜ ์žˆ๊ณ  ๊ทธ๋ ‡๋‹ค๋ฉด ์žฌ๊ท€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉ.